def iou(bbox1, bbox2):
    x_min1, y_min1, x_max1, y_max1 = bbox1
    x_min2, y_min2, x_max2, y_max2 = bbox2
    area1 = (x_max1 - x_min1) * (y_max1 - y_min1)
    area2 = (x_max2 - x_min2) * (y_max2 - y_min2)

    ix_min = max(x_min1, x_min2)
    iy_min = max(y_min1, y_min2)
    ix_max = min(x_max1, x_max2)
    iy_max = min(y_max1, y_max2)
    i_area = max(ix_max - ix_min, 0) * max(iy_max - iy_min, 0)
    return i_area / (area1 + area2 - i_area)


if __name__ == '__main__':
    print(iou([1, 1, 2, 2], [1, 1, 2, 2]))
    print(iou([0, 0, 2, 2], [0, 0, 4, 4]))
    print(iou([0, 0, 2, 2], [1, 1, 3, 3]))
    # 1.0
    # 0.25
    # 1/7 = 0.14285714285714285
    pass
